/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOCourier;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioCourier;
import pe.com.cotelasa.scp.entidad.Courier;

/**
 *
 * @author WINDOWS 7
 */
@Service
public class ServicioCourierImpl implements IServicioCourier, Serializable{
    
    @Inject
    private IDAOCourier dAOCourier; 
    
    @Override
    public Collection<Courier> listarCouriersActivos() throws ServiceException {
        try {
            return dAOCourier.listarActivos(Courier.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Courier conseguirCourierPorId(Integer idArticulo) throws ServiceException {
        try {
            return dAOCourier.obtenerEntidadPorId(Courier.class, idArticulo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio guardarCourier(Courier courier) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            //banco.setId(5);
            courier.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            dAOCourier.insertar(courier);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarCourier(Courier courier) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            dAOCourier.actualizar(courier);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<Courier> listarCouriersPorFiltro(Courier courier,Date fechaInicio, Date fechaFinal) throws ServiceException {
        /*try {
            Map<String, Object> parametro = new HashMap <String, Object>();
            parametro.put("courier", courier.getCourier());
            parametro.put("consignatario", courier.getConsignatario());
            if(courier.getTipoFlete() != '0'){
                parametro.put("tipoFlete", courier.getTipoFlete());
            }
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return dAOCourier.obtenerColeccionEntidadPorFiltros(Courier.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }*/
        try {
            return dAOCourier.listarCouriersPorFiltro(courier,fechaInicio,fechaFinal);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        
    }
    
    @Override
    public List<Courier> obtenerCourierReporte(Courier courier) throws ServiceException {
        /*try {
            Map<String, Object> parametro = new HashMap <String, Object>();
            parametro.put("courier", courier.getCourier());
            parametro.put("consignatario", courier.getConsignatario());
            if(courier.getTipoFlete() != '0'){
                parametro.put("tipoFlete", courier.getTipoFlete());
            }
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return dAOCourier.obtenerColeccionEntidadPorFiltros(Courier.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }*/
        try {
            return dAOCourier.obtenerCourierReporte(courier);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        
    }
    
}
